package util

import org.apache.spark.mllib.clustering.{KMeans, KMeansModel}
import org.apache.spark.mllib.linalg.Vector
import org.apache.spark.rdd.RDD

/**
  * 计算经纬度点间距 单位（米）
  */

object KmeansUtil {


  def kmeans(parsedTrainingData:RDD[Vector],K:Int): KMeansModel = {

    val numIterations = 50 //迭代计算的次数
    val runTimes = 30
    var clusterIndex: Int = 0

    val clusters: KMeansModel =
      KMeans.train(parsedTrainingData, K, numIterations,runTimes)
    /**
      *  K (分多少类)的选择是 K-means 算法的关键，Spark MLlib 在 KMeansModel
      *  类里提供了 computeCost 方法，该方法通过计算所有数据点到其最近的
      *  中心点的平方和来评估聚类的效果。一般来说，同样的迭代次数和算法跑的次数，
      *  这个值越小代表聚类的效果越好
      */
    val ssd = clusters.computeCost(parsedTrainingData)
    clusters
  }

}

